4.4 音频输入模块
(1)介绍与准备
ESP32开发平台板载的音频输出为驻极体麦克风和3.5MM耳机插座。驻极体麦克风有一个正极和接地引脚(连接到麦克风金属外壳)。音频信号是一种幅度可变的信号,而声音的“音量”或“响度”与信号的峰值、幅度有关。更高振幅的音频信号产生更高音量的声音,较低振幅的音频信号产生较低音量的声音。
因驻极体麦克风输出的信号非常微弱,因此需要将麦克风信号连接到前置放大器放大输出,然后再将其连接到ESP32的IO引脚上进行读取。制造前置放大器的一种方法是使用一个或多个“运算放大器”。运算放大器的简图下图所示:

运算放大器的一个重要方面是“增益”的概念。增益是放大器执行的放大级别。它是输出电压与输入电压之比,如下列公式表示。
增益(在公式上为gain)为 1 将导致输入信号不放大,增益为 10 将导致输入信号放大十倍。增益通常设置在 1 到大约 100 倍之间。
回到我们的ESP32开发平台,麦克风输入还是耳机输入的运算放大器都采用的是LMV358。麦克风接的ESP32的IO引脚为IO10,3.5MM耳机插座的左右声道分别接ESP32的IO8和IO15。



(2)实验代码
const int microphonePin = 10;
void setup() {
Serial.begin(9600);
}
void loop() {
int mn = 1024;
int mx = 0;
for (int i = 0; i < 10000; ++i) {
int val = analogRead(microphonePin);
mn = min(mn, val);
mx = max(mx, val);
}
int delta = mx - mn;//作差,求出峰峰值
Serial.print("Min=");
Serial.print(mn);
Serial.print(" Max=");
Serial.print(mx);
Serial.print(" Delta=");
Serial.println(delta);
}
(2)实验讲解
函数 | 说明 |
---|---|
Serial.begin() | 设置电脑与Arduino进行串口通讯时的数据传输速率 |
analogRead() | 从模拟输入引脚读取数值 |
min() | 计算两个数字的最小值。 |
max() | 计算两个数字的最大值。 |
(4)实验现象
编译上传代码后,打开串口监视器,选择波特率为9600,可以看到打印音频信号的最值和峰值。
